package bupt.party.online.dao;

import java.util.List;
import java.util.Set;

import org.hibernate.criterion.DetachedCriteria;

import bupt.party.online.model.Student;

public interface IStudentDao extends IBaseDao<Student> {
	public void delete(Long id);

	public void save(Student user);

	public void update(Student user);

	public List<Student> findAll();

	public List<Student> findBySqlString(String sql);
	
	public List<Student> find(String queryString,Object... values);
	
	public Integer getRecordAcount(DetachedCriteria criteria);
	
	public List<Student> findPageResult(DetachedCriteria criteria ,int firstResult,int maxResult);
	
	/**
	 * 根据用户的id号码 和 密码 查询 学生用户
	 * @param userId
	 * @param password
	 * @return
	 */
	public Student findStudentByUserIdAndPassword(String userId,String password);
	
	
	/**
	 * 保存学生对象
	 * @param student
	 */
	public void  saveOrUpdateStudent(Student student);
	
	/**
	 * 根据学号查询学生
	 * @param studentNO
	 * @return
	 */
	public Student  findStudentByStudentNO(String studentNO);
	
	/**
	 * 查询出北邮所有的有效的学生用户
	 * @return
	 */
	public List<Student> findAllStudent();
	
	
	
	/**
	 * 根据branchID查询有效学生用户的数量。 
	 * @param branchId
	 * @return
	 */
	public int getStudentCountByBranchId(int branchId);
	
	/**
	 * 根据支部id 查询组织下面的学生
	 * @param branchId
	 * @return
	 */
	public List<Student> findStudentByBranchId(Integer branchId);
	
	
	
	/**
	 * 根据某一个条件的查询出一定数量的记录数
	 * @param queryString
	 * @param values
	 * @param firstResult
	 * @param pageSize
	 * @return
	 */
	public List<Student> QueryByConditions(String queryString,
			Object[] values, int firstResult, int pageSize);
	
	/**
	 * 根据页 的大小获得记录数
	 * @param firstResult
	 * @param pageSize
	 * @return
	 */
	public List<Student> getResultsByPage(int firstResult,int pageSize);
	
	
	
	/**
	 * 
	 * @param branchId
	 * @param firstResult
	 * @param pageSize
,	 * @return
	 */
	public List<Student> QueryStudentByBranchId(int branchId, int firstResult,int pageSize);
	
	
	/**
	 * 
	 * @param highLevelQuery
	 * @param queryContent
	 * @param firstpa
	 * @param secondpa
	 * @return
	 */
	public DetachedCriteria getDetachedCriteria(Integer highLevelQuery,String queryContent,  Integer firstpa,
			Integer secondpa);
	
	
	/**
	 * 
	 * @param detachedCriteria
	 * @return
	 */
	public int queryStudentCountWithCriteria(DetachedCriteria detachedCriteria);
	
	/**
	 * 
	 * @param detachedCriteria
	 * @param firstResult
	 * @param maxResults
	 * @return
	 */
	public List<Student> queryStudentWithCriteria(DetachedCriteria detachedCriteria,
			int firstResult, int maxResults);
	
	/**
	 * 根据学生号 和 所在的支部id号 查找一个学生
	 * @param studentNO
	 * @param branchId
	 * @return
	 */
	public Student findStudentByStudentNOAndBranchId(String studentNO,int branchId);
	
	
	/**
	 * 根据学生号 和 支部集合  查找一个学生。
	 * @param studentNO
	 * @param branch_ids
	 * @return
	 */
	public Student findStudentByStudentNOAndBranchIds(String studentNO, Set<Integer> branch_ids);
}
